home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -in_the_mag- / basics / amos / galax.lha / Galax / GALAX.AMOS / GALAX.amosSourceCode
AMOS Source Code  |  1993-06-16  |  28KB  |  1,099 lines

  1. ' ------------------------------------------   
  2. '
  3. '           AMOSPro Compiler Example 
  4. '
  5. '             SYNTEX 's  G A L A X   
  6. '
  7. '          Code & Grafics by: AVORIAZ  
  8. '
  9. '            Music by: DARK-KNIGHT   
  10. '
  11. '     Last changes and remarks by JB BOLCATO 
  12. '
  13. '       (c) 1993 Europress Software Ltd. 
  14. '
  15. ' ------------------------------------------   
  16. '
  17. ' -----------------------------------------------      
  18. '  Remark:  No music on an unexpanded A500!
  19. '
  20. '  Here is a Great Shoot'em up (only one level!) 
  21. '  Note the scroll routine, it's a continuous
  22. '  game scroll routine. The whole 2 minutes scroll 
  23. '  Requires 1.5 K of data! 
  24. '    
  25. '  In addition, there's a map-maker which allows 
  26. '  you to modify or enlarge the background grafics.  
  27. '
  28. '  Average Compiler Acceleration: 25 -> 50 Hz!!! 
  29. ' -----------------------------------------------      
  30. ' Stage 1: Flying over an hostile planet 
  31. ' Stage 2: Alone in deep space....   
  32. ' Stage 3: Blast the big end-of-level-spaceship! 
  33. ' -----------------------------------------------      
  34. Set Buffer 50
  35. ' ---- Variables Init ---- 
  36. Hide 
  37. Close Workbench : Rem Kill Editor  
  38. Dim A(7000)
  39. Dim XX(8)
  40. Dim JX(6),LET(1000)
  41. Global JX(),NK,BNS,GO
  42. Led Off 
  43. ' Number of lives
  44. LIV0=5
  45. ' Key for immortality! 
  46. CLE=-1
  47. ' Ntsc offset
  48. NTS=20*(Ntsc=True)
  49. Dim E(200)
  50. Hide 
  51. ' --- Presentation --- 
  52. Do 
  53.    Dir$="AMOSPro_Extras:Compiler_Examples/AMOS_versions/GALAX/"
  54.    ' Load pic and hide all
  55.    Load "PicPres.Abk",10
  56.    Unpack 10 To 0
  57.    Screen Hide 0
  58.    ' Load the music and start the show! 
  59.    If Chip Free+Fast Free>512*1024
  60.       If Length(3)=0 : Load "Music.Abk",3 : End If 
  61.       Music 1
  62.    End If 
  63.    Screen Open 1,150,16,32,L
  64.    Screen Hide 1
  65.    Flash Off 
  66.    Get Palette 0
  67.    Screen 0
  68.    For N=0 To 31 : Colour N,0 : Next N
  69.    Wait Vbl : Screen Show 0
  70.    Fade 2 To 1
  71.    Wait 20
  72.    ' Load all BANKs   
  73.    If Length(1)=0 Then Load "Sprites.Abk",1 : Rem All sprites
  74.    If Length(4)=0 Then Load "Moves.Abk",4 : Rem Enemy movements
  75.    If Length(13)=0 Then Load "Mapping.Abk",13 : Rem Floor mapping data 
  76.    Load "Puzzle.Abk",10 : Rem load the puzzle  (PAGE SIZE 320*512/16c)   
  77.    ' (puzzles blocks are 32*32) 
  78.    If Length(5)=0 Then Load "PicMenu.Abk",5 : Rem Load the Menu picture
  79.    If Length(12)=0 Then Load "PicAst1.Abk",12 : Rem Small asteroids field  
  80.    If Length(14)=0 Then Load "PicAst2.Abk",14 : Rem Large asteroids field and end-of-level monster   
  81.    If Length(6)=0 Then Load "Samples.Abk",6 : Rem Sound effects
  82.    Sam Bank 6 : Sam Loop Off 
  83.    ' End of presentation
  84.    Timer=0 : Repeat : Multi Wait : Until Timer>250 or Fire(1)
  85.    Screen Close 1
  86.    Fade 2
  87.    Wait 22
  88.    Screen Close 0
  89.    ' --- Main Menu ---
  90.    Proc MEN
  91.    For N=1 To 15
  92.       Screen 0
  93.       Fade 2
  94.       Wait Vbl 
  95.       Screen 1
  96.       Fade 2
  97.       Wait Vbl 
  98.    Next N
  99.    Screen Close 1
  100.    Screen Close 0
  101.    Wait 15
  102.    ' --- Choice: Map maker -- 
  103.    If GO=2
  104.       Proc MAP
  105.    End If 
  106.    Del Block 
  107.    ' --- Game Setup ---   
  108.    TPS=0
  109.    DT=0
  110.    ADZ=32
  111.    For N=0 To 200
  112.       E(N)=ADT
  113.       Add ADT,32
  114.    Next N
  115.    ADT=0
  116.    ' Unpack and hide the puzzles' screen  
  117.    Unpack 10 To 1
  118.    Screen Hide 1
  119.    ' The 4 bitplane adresses  
  120.    ADR1=Logbase(0)
  121.    ADR2=Logbase(1)
  122.    ADR3=Logbase(2)
  123.    ADR4=Logbase(3)
  124.    ' Prepare the asteroids and end of level screen
  125.    ' Asteroids  
  126.    Screen Open 2,320,670,8,L
  127.    Flash Off 
  128.    Curs Off 
  129.    Cls 0 : Palette 0,0,0,0,0,0,0,0
  130.    ' End monster
  131.    Screen Open 3,320,670,8,L
  132.    Flash Off 
  133.    Curs Off 
  134.    Cls 0 : Palette 0,0,0,0
  135.    Unpack 12 To 0
  136.    Screen Hide 0
  137.    Screen Copy 0 To 3
  138.    Screen Copy 3,0,0,320,220 To 3,0,220
  139.    Screen 2
  140.    Unpack 14
  141.    Reserve Zone 1
  142.    Set Zone 1,10,0 To 320,190
  143.    Screen Display 3,150,56+NTS,320,228
  144.    Screen Display 2,150,56+NTS,320,228
  145.    Wait Vbl 
  146.    Dual Playfield 2,3
  147.    Screen 2
  148.    For N=1 To 15
  149.       Colour N,0
  150.    Next N
  151.    Screen Offset 2,0,200
  152.    Screen Offset 2,0,400
  153.    ' Score screen 
  154.    Screen Open 5,320,8,4,L
  155.    Screen Display 5,150,284+NTS,300,8
  156.    Screen Hide 5
  157.    Cls 2 : Curs Off : Flash Off : Scroll Off 
  158.    Get Palette 1 : Palette 0,$DDD,0,$4CF
  159.    Set Rainbow 0,2,16,"","",""
  160.    For I=0 To 3
  161.       Rain(0,I)=$11*I
  162.       Rain(0,7-I)=$11*I
  163.    Next I
  164.    Rainbow 0,0,284+NTS,8
  165.    Paper 2 : Pen 1
  166.    Print "SCORE:          LEVEL:     LIVES:";
  167.    Paper 2 : Pen 3
  168.    DISPLAY_SCORE
  169.    ' Main screen  
  170.    Screen Open 0,320,461,16,L
  171.    Screen Display 0,150,54+NTS,300,228
  172.    Screen Hide 0
  173.    Curs Off 
  174.    Flash Off 
  175.    For N=1 To 31
  176.       Inc I
  177.       Ink I
  178.       If I>7
  179.          I=1
  180.       End If 
  181.       Draw 0,N To 32,N
  182.    Next N
  183.    Get Palette 1
  184.    Cls 0
  185.    ' 4 bitplanes adresses of the main screen
  186.    ' Bottom 
  187.    AD1=Logbase(0)+9200
  188.    AD2=Logbase(1)+9200
  189.    AD3=Logbase(2)+9200
  190.    AD4=Logbase(3)+9200
  191.    ' Top
  192.    ADS1=Logbase(0)+18400
  193.    ADS2=Logbase(1)+18400
  194.    ADS3=Logbase(2)+18400
  195.    ADS4=Logbase(3)+18400
  196.    ' 2 different adresses for screen offset 
  197.    Y=230
  198.    Screen Offset 0,0,200
  199.    AD=1280 : ADT=0
  200.    ' Precalculation of adresses of puzzles
  201.    For P=1 To 200
  202.       For N=0 To 31
  203.          A(N1)=XC+AD-ADT
  204.          Inc N1
  205.          Add ADT,40
  206.       Next N
  207.       Add XC,4
  208.       ADT=0
  209.       If XC=40
  210.          XC=0
  211.          Add AD,1280
  212.       End If 
  213.    Next P
  214.    X=0
  215.    ST:
  216.    ' Colours of spaceships on screens   
  217.    For N=16 To 28 Step 4
  218.       For I=0 To 5
  219.          Screen I
  220.          Colour N+1,$897
  221.          Colour N+2,$564
  222.          Colour N+3,$342
  223.       Next I
  224.    Next N
  225.    ' Address of data for scrolls    
  226.    ADP=Start(13)+9*3
  227.    ADRD=0
  228.    XD=1
  229.    ARP=112
  230.    YG=220
  231.    XX1=3
  232.    XX2=3
  233.    XX3=3
  234.    XX4=3
  235.    XX5=3
  236.    XX6=3
  237.    Flash 15,"(300,1)(400,2)(500,2)(600,2)(700,2)(800,2)(900,2)(a00,2)(b00,2)(c00,2)(a00,2)(800,2)(600,2)(400,2)"
  238.    For N=1 To 6
  239.       XX(N)=3
  240.    Next N
  241.    Make Mask 
  242.    FR=12 : Rem Enemy space ships
  243.    DD=1
  244.    T=0
  245.    N=0
  246.    Y1=0
  247.    VL=0
  248.    X=0
  249.    Y=0
  250.    K=0
  251.    ' Get the first data of scroll 
  252.    ' (9 pieces of puzzles)
  253.    ADRD=0
  254.    X=E(Peek(ADP+ADRD))
  255.    X1=E(Peek(ADP+ADRD+1))
  256.    X2=E(Peek(ADP+ADRD+2))
  257.    X3=E(Peek(ADP+ADRD+3))
  258.    X4=E(Peek(ADP+ADRD+4))
  259.    X5=E(Peek(ADP+ADRD+5))
  260.    X6=E(Peek(ADP+ADRD+6))
  261.    X7=E(Peek(ADP+ADRD+7))
  262.    X8=E(Peek(ADP+ADRD+8))
  263.    Add ADRD,9
  264.    ' Start Inits
  265.    LIV=LIV0 : SCORE=0
  266.    ST=0 : DE=220 : FDD=1
  267.    ' Show all screens 
  268.    Screen Show 0
  269.    Screen Show 5
  270.    Do 
  271.       DEB:
  272.       Restore CC
  273.       If FDD=1
  274.          FDD=0
  275.          S=Screen
  276.          Screen 5 : Paper 2 : Pen 3 : DISPLAY_SCORE
  277.          Screen S
  278.          Screen Open 4,320,50,2,L
  279.          Screen Display 4,128,150+NTS,320,50
  280.          Cls 0 : Palette 0,0
  281.          Curs Off : Flash Off 
  282.          Paper 0 : Pen 1
  283.          Centre "GET READY!"
  284.          Fade 2,$0,$DEF
  285.          Wait 50
  286.          Fade 2
  287.          Wait 22
  288.          Screen Close 4
  289.          If ST=0
  290.             Fade 2 To 1
  291.             Wait 30
  292.             Screen 0
  293.             For N=16 To 28 Step 4
  294.                Colour N+1,$897
  295.                Colour N+2,$564
  296.                Colour N+3,$342
  297.             Next N
  298.          Else 
  299.             Screen 2
  300.             Fade 3,0,$333,$555,$777,$999,$BBB,$DDD,$FFF,,$222,$444,$555
  301.             Wait 32
  302.             For N=16 To 28 Step 4
  303.                Colour N+1,$897
  304.                Colour N+2,$564
  305.                Colour N+3,$342
  306.             Next N
  307.          End If 
  308.       End If 
  309.       V=2
  310.       VL=0
  311.       ' --- AMALs strings creation --- 
  312.       For N=8 To 12
  313.          Read XS,YS,KS,XS1
  314.          XS=XS+40
  315.          YS=YS-40
  316.          YS1=Rnd(40)+10
  317.          EE=Rnd(280)
  318.          DD=-DD
  319.          If DD<0
  320.             Inc V
  321.          End If 
  322.          Sprite N,117,70,FR
  323.          Channel N To Sprite N
  324.          ' Enemies    
  325.          A$="R:Let X="+Str$(XS)+"; Let Y="+Str$(YS)+"; For R1=0 To 180; Let Y=Y+2; Next R1;Let X=120; Let Y=70;"
  326.          A$=A$+"For R1=0 To "+Str$(VL)+"; Next R1; L:Let R4=R4+1;Anim 1,("+Str$(FR)+",1);Let X=120;Let Y=70;"
  327.          A$=A$+";PLay R4;Let X=500;Let Y=40;Anim 1,(12,1);For R0=0 To 50; Next R0;"
  328.          A$=A$+"Let X="+Str$(KS)+";Let Y=40;Let R1="+Str$(V)+"; For R0=0 To 100; Let Y=Y+R1;Next R0;Let X=120; Let Y=70; If R4=15 Jump T;Jump L; T:Let R4=0;Jump L "
  329.          Amal N,A$
  330.          Add VL,8
  331.       Next N
  332.       Sprite 15,250,227,2
  333.       ' Your spaceship   
  334.       Channel 15 To Sprite 15
  335.       A$="Let R2=1;L: Let R1=J1;Pause;Let RA=X;If R1=0 Jump T;If R1=24 Jump K;"
  336.       A$=A$+"If R1=20 Jump M; If R1=8 Jump K; If R1=4 Jump M;Jump L;"
  337.       A$=A$+"K: If X>395 J L; Let X=X+4; If R2=2 J R;Let R2=1;Jump L;"
  338.       A$=A$+"M: If X<145 J L; Let X=X-4; If R2=1 J S;Let R2=2;Jump L;"
  339.       A$=A$+"R: Anim 1,(3,3)(4,3)(5,3)(6,3);         Let R2=1;Let R4=0;Jump L;"
  340.       A$=A$+"S: Anim 1,(2,3)(7,3)(8,3)(9,3)(10,3);   Let R4=0;Let R2=2;Jump L;"
  341.       A$=A$+"T: If R4=1 J L;Let R4=1;If R2=1 J N; A 1,(9,3)(8,3)(7,3)(2,3); J L;"
  342.       A$=A$+"N: Anim 1,(5,3)(4,3)(3,3)(2,3); Jump L"
  343.       Amal 15,A$
  344.       ' 17 18 & 19 your shots
  345.       Channel 0 To Sprite 17
  346.       Sprite 17,0,310,1
  347.       RV$="R: Let X=0;Let Y=310;  K:If J1>15 Jump S;Pause;Jump K;"
  348.       RV$=RV$+" S: If RB&1 J K; If RT>0 J K; Let RB=RB+1; Let R4=0;"
  349.       RV$=RV$+" Let X=RA+8; Let Y=215; Let RT=16;  L: Let Y=Y-4; Pause;"
  350.       RV$=RV$+" Let RT=RT-1; If Y>32 Jump L; L RB=RB-1; Jump R;"
  351.       Amal 0,RV$
  352.       RV$=""
  353.       Channel 1 To Sprite 18
  354.       Sprite 18,0,310,1
  355.       RV$="R: Let X=0;Let Y=310;  K:If J1>15 Jump S;Pause;Jump K;"
  356.       RV$=RV$+" S: If RB&2 J K; If RT>0 J K; Let RB=RB+2; Let R4=0;"
  357.       RV$=RV$+" Let X=RA+8; Let Y=215; Let RT=16;  L: Let Y=Y-4; Pause;"
  358.       RV$=RV$+" Let RT=RT-1; If Y>32 Jump L; L RB=RB-2; Jump R;"
  359.       Amal 1,RV$
  360.       RV$=""
  361.       Channel 2 To Sprite 19
  362.       Sprite 19,0,310,1
  363.       RV$="R: Let X=0;Let Y=310;  K:If J1>15 Jump S;Pause;Jump K;"
  364.       RV$=RV$+" S: If RB&4 J K; If RT>0 J K; Let RB=RB+4; Let R4=0;"
  365.       RV$=RV$+" Let X=RA+8; Let Y=215; Let RT=16;  L: Let Y=Y-4; Pause;"
  366.       RV$=RV$+" Let RT=RT-1; If Y>32 Jump L; L RB=RB-4; Jump R;"
  367.       Amal 2,RV$
  368.       ' Enemies explode  
  369.       Channel 3 To Sprite 8
  370.       Amal 3,"L: If RD=1 Jump K; P; Jump L; K: Let RD=0; Pause;Anim 1,(15,3)(16,3)(17,2)(18,2)(19,2); For R0=0 To 4; Pause; Next R0; Let X=400; Let Y=400; Jump L;"
  371.       Channel 4 To Sprite 9
  372.       Amal 4,"L: If RE=1 Jump K; P; Jump L; K: Let RE=0; Anim 1,(15,3)(16,3)(17,2)(18,2)(19,2); For R0=0 To 4; Pause; Next R0; Let X=400; Let Y=400; Jump L;"
  373.       Channel 5 To Sprite 10
  374.       Amal 5,"L: If RF=1 Jump K; P; Jump L; K: Let RF=0; Anim 1,(15,3)(16,3)(17,2)(18,2)(19,2); For R0=0 To 4; Pause; Next R0; Let X=400; Let Y=400; Jump L;"
  375.       Channel 6 To Sprite 11
  376.       Amal 6,"L: If RG=1 Jump K; P; Jump L; K: Let RG=0; Anim 1,(15,3)(16,3)(17,2)(18,2)(19,2); For R0=0 To 4; Pause; Next R0; Let X=400; Let Y=400; Jump L;"
  377.       Channel 7 To Sprite 12
  378.       Amal 7,"L: If RH=1 Jump K; P; Jump L; K: Let RH=0; Anim 1,(15,3)(16,3)(17,2)(18,2)(19,2); For R0=0 To 4; Pause; Next R0; Let X=400; Let Y=400; Jump L;"
  379.       Channel 13 To Sprite 20
  380.       ' Enemies shots
  381.       Sprite 20,0,310,13
  382.       Amal 13,"P: Let X=0;Let RI=0; Let Y=310;L: If RI<>0 Jump K; Pause; Jump L; K: Let X=RI; Let Y=RJ+5; T: Let Y=Y+3; If Y>270 Jump P;Pause; Jump T"
  383.       Channel 14 To Sprite 21
  384.       Sprite 21,0,310,13
  385.       Amal 14,"P: Let X=0;Let RK=0; Let Y=310;L: If RK<>0 Jump K; Pause; Jump L; K: Let X=RK; Let Y=RL+5; T: Let Y=Y+4; If Y>270 Jump P; Pause; Jump T"
  386.       TR=0
  387.       ' --- Main Loop ---
  388.       Amal On 
  389.       TR1=3
  390.       FSC=Deek(Start(13)+6000)-18 : Rem FIN DES DATAS DU SCOLLING
  391.       Do 
  392.          Inc TR
  393.          If TR>5
  394.             TR=1
  395.          End If 
  396.          If TR5=1
  397.             ' Fight against big end monster
  398.             If Zone(X Sprite(17)-128,Y Sprite(17)-50)=1 and SK=0
  399.                Fade 1,,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
  400.                SK=1
  401.                Add SCORE,1000
  402.             End If 
  403.             If SK=1
  404.                Inc RV
  405.             End If 
  406.             If RV=8
  407.                RV=0
  408.                Fade 1,0,$333,$555,$777,$999,$BBB,$DDD,$FFF
  409.                SK=0
  410.                Inc CCL
  411.                If CCL>12
  412.                   For N=1 To 8
  413.                      Fade 1,,$F00,$F00,$F00,$F00,$F00,$F00
  414.                      Wait 8
  415.                      Fade 1,0,$333,$555,$777,$999,$BBB,$DDD,$FFF
  416.                      Wait 4
  417.                   Next N
  418.                   Flash Off 
  419.                   Fade 1
  420.                   Wait 15
  421.                   Exit 2
  422.                End If 
  423.             End If 
  424.          End If 
  425.          ' Fired shot collides enemy    
  426.          If Amreg(19)>10
  427.             Sam Play 8,2
  428.             Amreg(19)=10
  429.          End If 
  430.          If Sprite Col(7+TR,17 To 19)=-1
  431.             Sam Play 4,3
  432.             Add SCORE,50
  433.             Amreg(2+TR)=1
  434.             DISPLAY_SCORE
  435.          End If 
  436.          Inc TR1
  437.          If TR1>5
  438.             TR1=1
  439.          End If 
  440.          If Sprite Col(7+TR1,17 To 19)=-1
  441.             Sam Play 4,3
  442.             Add SCORE,50
  443.             Amreg(2+TR1)=1
  444.          End If 
  445.          TRS=Rnd(20)
  446.          ' Enemies shots
  447.          If TRS=1
  448.             SP=Rnd(5)+8
  449.             YP=Y Sprite(SP)
  450.             XP=X Sprite(SP)
  451.             If YP>70 and XP>130
  452.                Sam Play 4,2,25000
  453.                Amreg(8)=XP
  454.                Amreg(9)=YP
  455.             End If 
  456.          End If 
  457.          If TRS=10
  458.             SP=Rnd(5)+8
  459.             YP=Y Sprite(SP)
  460.             XP=X Sprite(SP)
  461.             If YP>70 and XP>130
  462.                Sam Play 4,2,25000
  463.                Amreg(10)=X Sprite(SP)
  464.                Amreg(11)=YP
  465.             End If 
  466.          End If 
  467.          If Sprite Col(15,20 To 21)=CLE
  468.             Sam Play 14,1
  469.             For N=1 To 8
  470.                Amal Freeze 
  471.                ' Collide with enemy shot  
  472.                Sprite 15,X Sprite(15),Y Sprite(15),499+N
  473.                Wait 2
  474.             Next N
  475.             Wait 30
  476.             Amal Off 
  477.             Sprite Off 
  478.             Amreg(1)=0
  479.             Amreg(19)=0
  480.             Fade 2
  481.             Wait 30
  482.             FDD=1
  483.             Dec LIV
  484.             If LIV<=0
  485.                MORT=1
  486.                Exit 2
  487.             End If 
  488.             Exit 
  489.          End If 
  490.          ' Collide with enemy 
  491.          If Sprite Col(15,8 To 12)=CLE
  492.             Sam Play 14,1
  493.             For N=1 To 8
  494.                Amal Freeze 
  495.                Sprite 15,X Sprite(15),Y Sprite(15),499+N
  496.                Wait 2
  497.             Next N
  498.             Wait 30
  499.             Amal Off 
  500.             Sprite Off 
  501.             Amreg(1)=0
  502.             Amreg(19)=0
  503.             Fade 2
  504.             Wait 30
  505.             Dec LIV
  506.             If LIV=<0
  507.                MORT=1
  508.                Exit 2
  509.             End If 
  510.             FDD=1
  511.             Exit 
  512.          End If 
  513.          If PRR>=9
  514.             ST=2
  515.          End If 
  516.          ' Jump to the asteroids field when the first scroll ends   
  517.          If ST=2
  518.             If FD=0
  519.                Screen To Back 
  520.                Screen 2
  521.                Fade 3,0,$333,$555,$777,$999,$BBB,$DDD,$FFF,,$222,$444,$555
  522.                FD=1
  523.             End If 
  524.             If TPS<760
  525.                Screen Offset 2,0,440-YY2
  526.                If YY2>DE-2
  527.                   YY2=0
  528.                End If 
  529.             Else 
  530.                TR5=1
  531.             End If 
  532.             Screen Offset 3,0,220-(YY1 mod 220)
  533.             Inc YY1
  534.             Add YY2,2
  535.             Inc TPS
  536.             If TPS=640
  537.                Flash 7,"(001,1)(003,1)(005,1)(008,1)(00a,1)(00c,1)(00e,1)(00f,1)(00a,1)(008,1)(006,1)(004,1)"
  538.                DE=420
  539.             End If 
  540.             Goto TP
  541.          End If 
  542.          ' Copy pieces of puzzle (9), bitsplane by bitplane 
  543.          ' to their respective place from left to right 
  544.          XA=A(X)
  545.          Copy ADR1+XA,ADR1+XA+4 To AD1-T
  546.          Copy ADR2+XA,ADR2+XA+4 To AD2-T
  547.          Copy ADR3+XA,ADR3+XA+4 To AD3-T
  548.          Copy ADR4+XA,ADR4+XA+4 To AD4-T
  549.          XA=A(X1)
  550.          Copy ADR1+XA,ADR1+XA+4 To AD1+4-T
  551.          Copy ADR2+XA,ADR2+XA+4 To AD2+4-T
  552.          Copy ADR3+XA,ADR3+XA+4 To AD3+4-T
  553.          Copy ADR4+XA,ADR4+XA+4 To AD4+4-T
  554.          XA=A(X2)
  555.          Copy ADR1+XA,ADR1+XA+4 To AD1+8-T
  556.          Copy ADR2+XA,ADR2+XA+4 To AD2+8-T
  557.          Copy ADR3+XA,ADR3+XA+4 To AD3+8-T
  558.          Copy ADR4+XA,ADR4+XA+4 To AD4+8-T
  559.          XA=A(X3)
  560.          Copy ADR1+XA,ADR1+XA+4 To AD1+12-T
  561.          Copy ADR2+XA,ADR2+XA+4 To AD2+12-T
  562.          Copy ADR3+XA,ADR3+XA+4 To AD3+12-T
  563.          Copy ADR4+XA,ADR4+XA+4 To AD4+12-T
  564.          XA=A(X4)
  565.          Copy ADR1+XA,ADR1+XA+4 To AD1+16-T
  566.          Copy ADR2+XA,ADR2+XA+4 To AD2+16-T
  567.          Copy ADR3+XA,ADR3+XA+4 To AD3+16-T
  568.          Copy ADR4+XA,ADR4+XA+4 To AD4+16-T
  569.          XA=A(X5)
  570.          Copy ADR1+XA,ADR1+XA+4 To AD1+20-T
  571.          Copy ADR2+XA,ADR2+XA+4 To AD2+20-T
  572.          Copy ADR3+XA,ADR3+XA+4 To AD3+20-T
  573.          Copy ADR4+XA,ADR4+XA+4 To AD4+20-T
  574.          XA=A(X6)
  575.          Copy ADR1+XA,ADR1+XA+4 To AD1+24-T
  576.          Copy ADR2+XA,ADR2+XA+4 To AD2+24-T
  577.          Copy ADR3+XA,ADR3+XA+4 To AD3+24-T
  578.          Copy ADR4+XA,ADR4+XA+4 To AD4+24-T
  579.          XA=A(X7)
  580.          Copy ADR1+XA,ADR1+XA+4 To AD1+28-T
  581.          Copy ADR2+XA,ADR2+XA+4 To AD2+28-T
  582.          Copy ADR3+XA,ADR3+XA+4 To AD3+28-T
  583.          Copy ADR4+XA,ADR4+XA+4 To AD4+28-T
  584.          XA=A(X8)
  585.          Copy ADR1+XA,ADR1+XA+4 To AD1+32-T
  586.          Copy ADR2+XA,ADR2+XA+4 To AD2+32-T
  587.          Copy ADR3+XA,ADR3+XA+4 To AD3+32-T
  588.          Copy ADR4+XA,ADR4+XA+4 To AD4+32-T
  589.          ' Copy at top of screen for screen offset
  590.          Copy AD1-T,AD1-T+40 To ADS1-T
  591.          Copy AD2-T,AD2-T+40 To ADS2-T
  592.          Copy AD3-T,AD3-T+40 To ADS3-T
  593.          Copy AD4-T,AD4-T+40 To ADS4-T
  594.          Add T,40
  595.          ' Value for the 32nd piece of each part  
  596.          Inc X
  597.          Inc X1
  598.          Inc X2
  599.          Inc X3
  600.          Inc X4
  601.          Inc X5
  602.          Inc X6
  603.          Inc X7
  604.          Inc X8
  605.          Inc PP
  606.          ' New series of 9 pieces of puzzle 
  607.          If PP=32
  608.             PP=0
  609.             X=E(Peek(ADP+ADRD))
  610.             X1=E(Peek(ADP+ADRD+1))
  611.             X2=E(Peek(ADP+ADRD+2))
  612.             X3=E(Peek(ADP+ADRD+3))
  613.             X4=E(Peek(ADP+ADRD+4))
  614.             X5=E(Peek(ADP+ADRD+5))
  615.             X6=E(Peek(ADP+ADRD+6))
  616.             X7=E(Peek(ADP+ADRD+7))
  617.             X8=E(Peek(ADP+ADRD+8))
  618.             Add ADRD,9
  619.             If ADRD>=FSC
  620.                ST=1
  621.             End If 
  622.             If ST=1
  623.                Inc PRR
  624.                ADRD=FSC+18
  625.             End If 
  626.          End If 
  627.          ' Normal scrolling 
  628.          Screen Offset 0,0,Y
  629.          TP:
  630.          If Mouse Key=2
  631.             Fade 2
  632.             Wait 22
  633.             Exit 2
  634.          End If 
  635.          Wait Vbl 
  636.          Dec Y
  637.          If Y<=0
  638.             T=0
  639.             ' ST=1 
  640.             Y=230
  641.          End If 
  642.       Loop 
  643.    Loop 
  644.    CC:
  645.    Data 190,50,160,90,240,50,220,140,290,50,280,190,210,75,340,320,270,75,400,440
  646.    ' --- Game Over! --- 
  647.    FIN:
  648.    Amal Off 
  649.    Sprite Off 
  650.    Wait Vbl 
  651.    Screen Close 0
  652.    Screen Close 1
  653.    Screen Close 2
  654.    Screen Close 3
  655.    If MORT=1
  656.       Screen Open 0,320,200,2,L
  657.       Curs Off 
  658.       Flash Off 
  659.       Cls 0
  660.       For N=1 To 12 : Print : Next N
  661.       Centre "GAME OVER"
  662.       For I=63 To 0 Step -1
  663.          Mvolume I
  664.          Wait 3
  665.       Next I
  666.       Fade 2 : Wait Vbl 
  667.       Rainbow Del 0
  668.       Wait Vbl 
  669.       Screen 5 : Fade 1
  670.       Wait 30
  671.       Screen Close 5
  672.    Else 
  673.       Default 
  674.       End 
  675.    End If 
  676. Loop 
  677. ' --- Procedures --- 
  678. Procedure MAP
  679.    Hide 
  680.    Screen Open 5,640,50,4,Hires
  681.    Screen Display 5,128,260,320,50
  682.    Flash Off 
  683.    Cls 0
  684.    Colour 1,$DDD
  685.    Colour 0,$333
  686.    Paper 0
  687.    Pen 1
  688.    Erase 15
  689.    Reserve As Data 15,6200 : Rem 6,2 k suffisent
  690.    Rem transfert des datas du scroll dans une banque de travail.
  691.    Copy Start(13),Start(13)+Length(13) To Start(15)
  692.    Cls 0
  693.    Paper 0
  694.    Pen 1
  695.    Locate 0,0
  696.    Print "Block No:  0         Space - Place block into map  5-Wipe block"
  697.    Print "7 and 9 to select a new block"
  698.    Print "+ and - to scroll up and down the map.    F=To end and save map"
  699.    Unpack 10 To 0
  700.    Screen Hide 0
  701.    Screen Open 1,320,225,16,L
  702.    Screen Display 1,140,34,320,225
  703.    Cls 0 : Flash Off 
  704.    Get Palette 0
  705.    For N=16 To 31
  706.       Colour N,Colour(N-16)
  707.    Next N
  708.    X=0
  709.    Y=0
  710.    Screen 0
  711.    Get Sprite 100,0,0 To 32,32
  712.    Screen 1
  713.    AD=54
  714.    ADS=Start(15)
  715.    X1=0
  716.    Y1=192
  717.    X=0
  718.    Y=0
  719.    Y=1
  720.    XA=0
  721.    YA=1
  722.    XA1=0
  723.    YA1=192
  724.    If ADS<>0
  725.       For N=0 To 62
  726.          AR=Peek(ADS+N)
  727.          Screen 0
  728.          If AR=0
  729.             Get Block 1,0,0,32,32
  730.             Goto Y
  731.          End If 
  732.          For M=0 To AR-1
  733.             Add X,32
  734.             If X>=319
  735.                X=0
  736.                Add Y,32
  737.             End If 
  738.             Get Block 1,X,Y,32,32
  739.          Next M
  740.          Y:
  741.          X=0
  742.          Y=1
  743.          Screen 1
  744.          Put Block 1,X1,Y1
  745.          Add X1,32
  746.          If X1>=320-32
  747.             X1=0
  748.             Add Y1,-32
  749.          End If 
  750.       Next N
  751.    End If 
  752.    Y=1
  753.    X=0
  754.    X1=0
  755.    Y1=0
  756.    AD=0
  757.    ADE=54
  758.    Rem 1305 
  759.    DER=Deek(Start(13)+6000)
  760.    Screen 5
  761.    Curs Off 
  762.    VID=84
  763.    Locate 2,4 : Print "End of data :"; Using "#####";DER
  764.    Locate 45,4 : Print "Data position :"
  765.    Screen 1
  766.    Do 
  767.       Sprite 1,X1+128,Y1+34,100
  768.       A$=Inkey$
  769.       AK=Asc(A$)
  770.       If AK=31 and Y1<199-32
  771.          Y1=Y1+32
  772.          Add AD,-9
  773.       End If 
  774.       If AK=30 and Y1>0
  775.          Add AD,9
  776.          Y1=Y1-32
  777.       End If 
  778.       If AK=28 and X1<319-64
  779.          X1=X1+32
  780.          Add AD1,1
  781.       End If 
  782.       If AK=29 and X1>0
  783.          Add AD1,-1
  784.          X1=X1-32
  785.       End If 
  786.       If A$=" "
  787.          Put Block 1,X1,Y1
  788.          ADRP=(ADE-Abs(AD))+AD1
  789.          Poke ADS+ADRP,PP
  790.       End If 
  791.       If A$="5"
  792.          Cls 0,X1,Y1 To X1+32,Y1+32
  793.          ADRP=(ADE-Abs(AD))+AD1
  794.          Poke ADS+ADRP,VID
  795.       End If 
  796.       If ADRP>DER
  797.          Screen 5
  798.          DER=ADRP
  799.          Locate 2,4 : Print "End of data :"; Using "#####";DER
  800.          Screen 0
  801.       End If 
  802.       Screen 5
  803.       Locate 60,4 : Print Using "####";ADE-Abs(AD)
  804.       Screen 1
  805.       If A$="-" and F>0
  806.          Dec F
  807.          Add ADE,-9
  808.          Screen Copy 1,0,0,320,224 To 1,0,-32
  809.          Cls 0,0,224-32 To 320,225
  810.          Gosub H
  811.       End If 
  812.       If A$="+" and(ADE-Abs(AD))<5990
  813.          Inc F
  814.          Add ADE,9
  815.          Screen Copy 1,0,0,320,224 To 1,0,32
  816.          Cls 0,0,0 To 320,32
  817.          Gosub B
  818.       End If 
  819.       If A$="9" and PP<160
  820.          Screen 5
  821.          Locate 11,0 : Print Using "###";PP
  822.          Add X,32
  823.          Inc PP
  824.          Inc SP
  825.          If X>=320
  826.             X=0
  827.             Add Y,32
  828.          End If 
  829.          Wait Vbl 
  830.          Screen 0
  831.          Sprite Off 
  832.          Get Sprite 100,X,Y To X+32,Y+32
  833.          Get Block 1,X,Y,32,32
  834.          Screen 1
  835.       End If 
  836.       If A$="f"
  837.          Goto FIN
  838.       End If 
  839.       If A$="F"
  840.          Goto FIN
  841.       End If 
  842.       If A$="7" and PP>0
  843.          Dec PP
  844.          Screen 5
  845.          Locate 11,0 : Print Using "###";PP
  846.          Add X,-32
  847.          If X<0
  848.             X=320-32
  849.             Add Y,-32
  850.          End If 
  851.          Screen 0
  852.          Sprite Off 
  853.          Get Sprite 100,X,Y To X+32,Y+32
  854.          Get Block 1,X,Y,32,32
  855.          Screen 1
  856.       End If 
  857.       O:
  858.    Loop 
  859.    H:
  860.    XA=0
  861.    YA=1
  862.    XA1=0
  863.    YA1=192
  864.    AP=ADE-9*6
  865.    For N=0 To 8
  866.       AR=Peek(Start(15)+AP+N)
  867.       If AR=0
  868.          XA=0
  869.          YA=0
  870.       End If 
  871.       Screen 0
  872.       For M=0 To AR-1
  873.          Add XA,32
  874.          If XA>=319
  875.             XA=0
  876.             Add YA,32
  877.          End If 
  878.          Get Block 2,XA,YA,32,32
  879.       Next M
  880.       XA=0
  881.       YA=1
  882.       Screen 1
  883.       Put Block 2,XA1,YA1
  884.       Add XA1,32
  885.    Next N
  886.    N=0
  887.    Return 
  888.    B:
  889.    XA=0
  890.    YA=1
  891.    XA1=0
  892.    YA1=0
  893.    ' RT=Y1/32 
  894.    RT1=9*RT
  895.    AP=ADE+RT1
  896.    For N=0 To 8
  897.       AR=Peek(Start(15)+AP+N)
  898.       Screen 0
  899.       If AR=0
  900.          XA=0
  901.          YA=0
  902.          Get Block 2,0,0,32,32
  903.          Goto HS
  904.       End If 
  905.       For M=0 To AR-1
  906.          Add XA,32
  907.          If XA>=319
  908.             XA=0
  909.             Add YA,32
  910.          End If 
  911.          Get Block 2,XA,YA,32,32
  912.       Next M
  913.       HS:
  914.       XA=0
  915.       YA=1
  916.       Screen 1
  917.       Put Block 2,XA1,YA1
  918.       Add XA1,32
  919.    Next N
  920.    N=0
  921.    Return 
  922.    FIN:
  923.    Sprite Off 
  924.    Screen Close 0
  925.    Screen Close 5
  926.    Screen Close 1
  927.    Screen Open 0,640,200,2,Hires
  928.    Curs Off 
  929.    Cls 0
  930.    Paper 0
  931.    Pen 1
  932.    Colour 1,$CCC
  933.    Colour 0,0
  934.    Print 
  935.    Print 
  936.    Print "Do you want to save your map? Press Space to save it to the disk"
  937.    Print "named as:  DTA1"
  938.    Print "A-Abandons the save and takes you to the game."
  939.    Do 
  940.       A$=Inkey$
  941.       If A$=" "
  942.          Doke Start(15)+6000,DER
  943.          Save "DTA1",15
  944.          Exit 
  945.       End If 
  946.       If A$="A"
  947.          Exit 
  948.       End If 
  949.       If A$="a"
  950.          Exit 
  951.       End If 
  952.    Loop 
  953.    Del Sprite 100
  954.    Fade 1
  955.    Wait 20
  956. End Proc
  957. Procedure MEN
  958.    Unpack 5 To 0
  959.    Screen Hide 0
  960.    Get Block 1,0,0,320,60
  961.    Screen Open 0,320,240,4,L
  962.    Flash Off 
  963.    Palette 0,0,0,0
  964.    Screen Open 1,320,800,2,L
  965.    Flash Off 
  966.    Palette 0,0,0,0
  967.    Screen Display 0,128,80+NTS,320,170
  968.    Wait Vbl 
  969.    Dual Playfield 0,1
  970.    Screen 0
  971.    Cls 0
  972.    Cls 3,0,0 To 320,1
  973.    Cls 3,0,169 To 320,170
  974.    Put Block 1,0,55
  975.    Fade 3,$4,$8AC,$468,$246,,,,,,$FFF
  976.    Screen 1
  977.    Cls 0
  978.    Gosub SCRT
  979.    Screen 1
  980.    Double Buffer 
  981.    Autoback 0
  982.    Do 
  983.       ADRS=Logbase(0)
  984.       Rem 1er plan  d'etoiles
  985.       Copy ADR1,ADR1+4 To ADRS+ADR8
  986.       Copy ADR1,ADR1+4 To ADRS+ADR8+292
  987.       Copy ADR1,ADR1+4 To ADRS+ADR8+1984
  988.       Copy ADR1,ADR1+4 To ADRS+ADR8+900
  989.       Copy ADR1,ADR1+4 To ADRS+ADR8+1528
  990.       Copy ADR1,ADR1+4 To ADRS+ADR8+4654
  991.       Copy ADR1,ADR1+4 To ADRS+ADR8+5246
  992.       Copy ADR1,ADR1+4 To ADRS+ADR8+3588
  993.       Copy ADR1,ADR1+4 To ADRS+ADR8+943
  994.       Copy ADR1,ADR1+4 To ADRS+ADR8+1943
  995.       Copy ADR1,ADR1+4 To ADRS+ADR8+2443
  996.       Copy ADR1,ADR1+4 To ADRS+ADR8+3643
  997.       Rem 2 eme plan  d'etoiles
  998.       Copy ADR11,ADR11+4 To ADRS+ADR81
  999.       Copy ADR11,ADR11+4 To ADRS+ADR81+342
  1000.       Copy ADR11,ADR11+4 To ADRS+ADR81+3154
  1001.       Copy ADR11,ADR11+4 To ADRS+ADR81+1328
  1002.       Copy ADR11,ADR11+4 To ADRS+ADR81+3844
  1003.       Copy ADR11,ADR11+4 To ADRS+ADR81+5254
  1004.       Copy ADR11,ADR11+4 To ADRS+ADR81+5588
  1005.       Copy ADR11,ADR11+4 To ADRS+ADR81+4852
  1006.       Copy ADR11,ADR11+4 To ADRS+ADR81+1652
  1007.       Copy ADR11,ADR11+4 To ADRS+ADR81+204
  1008.       Copy ADR11,ADR11+4 To ADRS+ADR81+5204
  1009.       Rem 3 eme plan  d'etoiles
  1010.       Copy ADR12,ADR12+4 To ADRS+ADR82
  1011.       Copy ADR12,ADR12+4 To ADRS+ADR82+262
  1012.       Copy ADR12,ADR12+4 To ADRS+ADR82+914
  1013.       Copy ADR12,ADR12+4 To ADRS+ADR82+2958
  1014.       Copy ADR12,ADR12+4 To ADRS+ADR82+3564
  1015.       Copy ADR12,ADR12+4 To ADRS+ADR82+5064
  1016.       Copy ADR12,ADR12+4 To ADRS+ADR82+3268
  1017.       Copy ADR12,ADR12+4 To ADRS+ADR82+1648
  1018.       Copy ADR12,ADR12+4 To ADRS+ADR82+504
  1019.       Copy ADR12,ADR12+4 To ADRS+ADR82+4123
  1020.       Copy ADR12,ADR12+4 To ADRS+ADR82+1123
  1021.       Copy ADR12,ADR12+4 To ADRS+ADR82+2623
  1022.       Copy ADR12,ADR12+4 To ADRS+ADR82+623
  1023.       Copy ADR12,ADR12+4 To ADRS+ADR82+3523
  1024.       Screen Swap 
  1025.       Wait Vbl 
  1026.       Add ADR11,8 : Add ADR1,4 : Add ADR12,16
  1027.       If ADR1=ADR2
  1028.          Add ADR8,2
  1029.          ADR1=ADR3
  1030.       End If 
  1031.       If ADR11=ADR21
  1032.          Add ADR81,2
  1033.          ADR11=ADR3
  1034.       End If 
  1035.       If ADR12=ADR22
  1036.          Add ADR82,2
  1037.          ADR12=ADR3
  1038.       End If 
  1039.       A$=Inkey$
  1040.       If A$="1"
  1041.          GO=1
  1042.          Exit 
  1043.       End If 
  1044.       If A$="&"
  1045.          GO=1
  1046.          Exit 
  1047.       End If 
  1048.       If A$="2"
  1049.          GO=2
  1050.          Exit 
  1051.       End If 
  1052.       If A$="�"
  1053.          GO=2
  1054.          Exit 
  1055.       End If 
  1056.    Loop 
  1057.    Goto FDD
  1058.    SCRT:
  1059.    Screen Open 4,960,45,2,L
  1060.    Screen Hide 4
  1061.    Cls 0
  1062.    N3=16
  1063.    N1=16
  1064.    For N=1 To 20
  1065.       Plot N3,0,1
  1066.       N1=N1+32
  1067.       Add N2,1
  1068.       N3=N1+N2
  1069.    Next N
  1070.    ADR1=Logbase(0)
  1071.    Screen 1
  1072.    ADRS=Phybase(0)+100
  1073.    ADR8=400
  1074.    ADR2=ADR1+(4*16)
  1075.    ADR3=ADR1
  1076.    ADR11=ADR1
  1077.    ADR81=ADR8
  1078.    ADR21=ADR2
  1079.    ADR31=ADR1
  1080.    ADR12=ADR1
  1081.    ADR82=ADR8
  1082.    ADR22=ADR2
  1083.    ADR32=ADR1
  1084.    ADR13=ADR1
  1085.    ADR83=ADR8
  1086.    ADR23=ADR2
  1087.    ADR33=ADR1
  1088.    Colour 1,$FFF
  1089.    Return 
  1090.    FDD:
  1091. End Proc
  1092. Procedure DISPLAY_SCORE
  1093.    Shared SCORE,LIV
  1094.    S=Screen : Screen 5
  1095.    Locate 6,0 : Print SCORE;
  1096.    Locate 23,0 : Print " 1";
  1097.    Locate 33,0 : Print LIV;
  1098.    Screen S
  1099. End Proc